草庐IT

C++ typedef 结构与类

全部标签

c# - 为什么 System.Drawing Rectangle、Point、Size 等可变结构而不是类?

Microsoft决定制作这些结构有什么原因吗?这三个都是可变的。如果它们是不可变的或引用类型,我会发现它们更容易处理。如果有理由说它们必须是结构体,那么为什么它们是可变的? 最佳答案 为什么是结构体值语义这些值的两个相同实例之间没有本质区别。任何具有坐标[2,3]的Point都等于具有相同坐标的任何其他点,很像任何两个具有相似坐标的int值相等。这符合设计指南:Itlogicallyrepresentsasinglevalue,similartoprimitivetypes(integer,double,andsoon).性能Va

c# 修改 List<T> 中的结构

简短的问题:如何修改List中的单个项目?(或者更准确地说,struct的成员存储在List中?)完整解释:首先,下面使用的struct定义:publicstructitemInfo{...(Strings,Chars,boring)...publicStringnameStr;...(yougettheidea,nothingfancy)...publicStringsubNum;//BTWthisistheelementI'mtryingtosorton}publicstructslotInfo{publicCharcatID;publicStringsortName;public

c# - 为什么 BitVector 32 结构比 BitArray 更高效?

BitArray和BitVector32结构有什么区别,BitVector32结构相对于BitArray有什么优势?为什么BitVector32结构比BitArray更高效?提前致谢。周杰... 最佳答案 BitVector32ismoreefficientthanBitArrayforBooleanvaluesandsmallintegersthatareusedinternally.ABitArraycangrowindefinitelyasneeded,butithasthememoryandperformanceoverhe

c# - 将结构转换为通用接口(interface)时是否有装箱/拆箱?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Structs,InterfacesandBoxing来自MSDN:http://msdn.microsoft.com/en-us/library/yz2be5wk.aspxBoxingistheprocessofconvertingavaluetypetothetypeobjectortoanyinterfacetypeimplementedbythisvaluetype.但是通用接口(interface)呢?例如,int派生自IComparable和IComparable.假设我有以下代码:voidfoo(

c# - 从结构继承

我想弄清楚我的代码有什么问题。我有这段代码:publicstructMyStructA{publicMyStructA(stringstr){myString=str;}publicstringmyString;}publicstructMyStructB:MyStructA{publicstringmyReversString;}我得到这个错误:Erroratcompiletime:Type'MyStructA'ininterfacelistisnotaninterface我不明白为什么?.net不像类那样实现结构? 最佳答案 结

c# - 长生命周期对象的结构与类

当您需要非常小的对象时,比如包含2个float属性,并且您将拥有数百万个不会立即被“销毁”的对象,结构是更好的选择还是类?就像在作为库的xna中,有point3s等作为结构,但如果您需要长时间保留这些值,它会不会对性能造成威胁? 最佳答案 与大多数关于结构的问题相反,这实际上似乎是对结构的一个很好的使用。如果它包含的数据是值类型,并且您将使用其中的大量数据,那么结构会很有效。一些提示:::结构不应大于16字节,否则将失去性能优势。::使结构不可变。这使用法更加清晰。例子:publicstructPoint3D{publicfloat

c# - Dapper:映射层次结构和单一不同的属性

我真的很喜欢Dapper的简单性和可能性。我想使用Dapper来解决我日常面临的常见挑战。这些在下面描述。这是我的简单模型。publicclassOrderItem{publiclongId{get;set;}publicItemItem{get;set;}publicVendorVendor{get;set;}publicMoneyPurchasePrice{get;set;}publicMoneySellingPrice{get;set;}}publicclassItem{publiclongId{get;set;}publicstringTitle{get;set;}public

c# - 在 .Net 中,出于性能原因,我什么时候应该通过引用传递结构?

在我的C#应用程序中,我有一个很大的结构(176字节),它每秒可能被传递给一个函数十万次。这个函数然后简单地获取一个指向结构的指针并将指针传递给非托管代码。函数和非托管代码都不会对该结构进行任何修改。我的问题是,我应该按值还是按引用将结构传递给函数?在这种特殊情况下,我的猜测是通过引用传递比将176个字节压入调用堆栈要快得多,除非JIT碰巧认识到该结构从未被修改(我的猜测是它无法识别这一点,因为该结构的地址传递给非托管代码)并优化代码。既然已经到了,我们还要回答更一般的情况,即函数不将结构的指针传递给非托管代码,而是对结构的内容执行一些只读操作结构。通过引用传递结构会更快吗?在这种情况

c# - 如何使结构不可变?

在StackOverflow和互联网上,我发现保持结构不可变是一个很好的设计原则。不幸的是,我从未见过任何实际导致这些结构真正不可变的实现。假设一个结构内部没有任何引用类型,我该如何真正使结构不可变?也就是说,我如何防止其任何原始字段发生突变(可能通过编译时/运行时异常)?我写了一个简单的测试,试图使结构不可变,但即使使用System.ComponentModel.ImmutableObjectAttribute也不起作用:classProgram{staticvoidMain(string[]args){ImmutableStructimmStruct1=newImmutableSt

c# - 为什么 c# 编译器在某些情况下会发出 newobj/stobj 而不是 'call instance .ctor' 来进行结构初始化

这里是一些用C#编写的测试程序:usingSystem;structFoo{intx;publicFoo(intx){this.x=x;}publicoverridestringToString(){returnx.ToString();}}classProgram{staticvoidPrintFoo(refFoofoo){Console.WriteLine(foo);}staticvoidMain(string[]args){Foofoo1=newFoo(10);Foofoo2=newFoo(20);Console.WriteLine(foo1);PrintFoo(reffoo2)